package collection;

import java.util.HashMap;
import java.util.Map;

/**
 *  java.util.Map 查找表
 *  Map体现的样子是一个多行两列的表格，其中左列称为key,右列称为value
 *  Map总是根据key获取对应的value
 *  Map要求key不允许重复(key的equals方法作为判定重复的依据)
 *
 *  常用实现类:
 *  java.util.HashMap,散列表,当今查询速度最快的数据结构
 *
 */
public class MapDemo1 {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<>();
        /*
            V put(K k,V v)
            将一组键值对存入Map,因为Map要求不允许有重复的key，因此使用已有的
            key存放value那么就是替换value操作,此时方法返回值为被替换的value，否则
            返回值为null
            返回值为
         */
        Integer v = map.put("语文", 99);
        /*
            若value是包装类,那么接收时比卖你用基本类型,否则若返回值为null时,自动
            拆箱会引发空指针异常
            下面代码会被编译器自动拆箱为:
            int v = map.put("语文",99).intValue();
         */
        //int v = map.put("语文",99);
        map.put("数学",98);
        map.put("英语",97);
        map.put("物理",96);
        map.put("化学",99);
        System.out.println(map);

        //替换value
        v = map.put("语文",55);
        System.out.println(map);
        System.out.println(v);

        /*
            V get(Object key)
            根据给定的key获取相应的value.如果给定的key不存在则返回值为null
         */
        v = map.get("数学");
        System.out.println("数学:"+v);
        v = map.get("体育");
        System.out.println("体育："+v);

        /*
            V remove(Object key)
            删除指定键的一组键值对,返回键对应的值
         */
        v = map.remove("化学");
        System.out.println(map);
        System.out.println(v);

        //size查看Map中的元素个数(一组键值对算一个元素)
        System.out.println("size:"+map.size());
        //判断Map是否包含给定的key或value
        boolean ck = map.containsKey("语文");
        System.out.println("包含key:"+ck);
        boolean cv = map.containsValue(55);
        System.out.println("包含value:"+cv);

    }

}
